const mongoose = require("mongoose");
// 职责：1- 负责连接数据库   2- 将数据库的方法进行二次重写
class Db{
    constructor(model) {
        this.model = model;
    }
    // 连接数据库
    _connect() {
        // 如果数据库已经连接成功
        if(mongoose.connection.readyState === 1) return Promise.resolve();
        return mongoose.connect("mongodb://127.0.0.1:27017/weibo", {
            serverSelectionTimeoutMS: 10000
        })
    }
    // 添加一条记录
    // insertObj添加的内容
    async insertOne(insertObj){
        // 连接数据库
        await this._connect();
        return this.model(insertObj).save();
    }
    // 根据条件查找文档数量
    async count(whereObj={}){
        await this._connect();
        return this.model.count(whereObj);
    }
    // find
    async find({whereObj={},sortObj={},limit=0,skip=0}={}){
        await this._connect();
        return this.model.find(whereObj).sort(sortObj).limit(limit).skip(skip);
    }

    async updateOneById(_id,upObj){
        await this._connect();
        return this.model.updateOne({_id},upObj);
    }

    async deleteOneById(_id){
        await this._connect();
        return this.model.deleteOne({_id});
    }
    // find()
}
module.exports = Db;